package main.java.aplicacion.comentarios.entidades;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.ListIterator;

import main.java.aplicacion.comentarios.entidades.Comentario;
import main.java.aplicacion.juegos.entidades.Juego;
import main.java.aplicacion.usuarios.entidades.Usuario;
import main.java.datatypes.comentarios.ComentarioVO;

public class Comentario {

	private int numero;
	private String texto;
	private Date fecha;
	private Comentario respondeA;
	private List<Comentario> respuestas;
	private Juego juego;
	private Usuario usuario;
	
	public Comentario(ComentarioVO dtComentario) {
		this.numero = dtComentario.getNumero();
		this.texto = dtComentario.getTexto();
		this.fecha = dtComentario.getFecha();
		this.respuestas = new ArrayList<Comentario>();//toComentarios(dtComentario.getRespuestas());
		// this.juego = dtComentario.getJuego();
		// this.usuario = dtComentario.getUsuario();
	}
	
	private List<Comentario> toComentarios(List<ComentarioVO> dtComentarios) {
		List<Comentario> comentarios = new ArrayList<Comentario>();
		for (ComentarioVO dtComentario : dtComentarios) {
			Comentario comentario = new Comentario(dtComentario);
			comentarios.add(comentario);
		}
		return comentarios;
	}

	public int getNumero() {
		return numero;
	}

	public void setNumero(int numero) {
		this.numero = numero;
	}

	public String getTexto() {
		return texto;
	}

	public void setTexto(String texto) {
		this.texto = texto;
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public Comentario getRespondeA() {
		return respondeA;
	}

	public void setRespondeA(Comentario respondeA) {
		this.respondeA = respondeA;
	}
	
	public List<Comentario> getRespuestas() {
		return respuestas;
	}

	public void setRespuestas(List<Comentario> respuestas) {
		this.respuestas = respuestas;
	}

	public Juego getJuego() {
		return juego;
	}

	public void setJuego(Juego juego) {
		this.juego = juego;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public ComentarioVO getComentarioVO() {
		ComentarioVO com = new ComentarioVO(this.numero, this.texto, this.fecha, this.usuario.getNick(), this.juego.getNombre());
		com.setNivel(this.nivel());
		if(this.respondeA != null){
			com.setRespondeA(this.respondeA.getNumero());
		}
		if(!this.respuestas.isEmpty()){
			List<ComentarioVO> resp = new ArrayList<ComentarioVO>();
			ListIterator<Comentario> it = this.respuestas.listIterator();
			while(it.hasNext()){
				Comentario c = (Comentario) it.next();
				ComentarioVO cvo = new ComentarioVO(c.getNumero(), c.getTexto(), c.getFecha(), c.getUsuario().getNick(), c.getJuego().getNombre());
				cvo.setNivel(c.nivel());
				if(c.getRespuestas() != null){
					List<ComentarioVO> respuestas = new ArrayList<ComentarioVO>();
					for(Comentario respuesta: c.getRespuestas()){
						respuestas.add(respuesta.getComentarioVO());
					}
					cvo.setRespuestas(respuestas);
				}
				
				resp.add(cvo);
			}
			com.setRespuestas(resp);
		}
		return com;
	}
	
	public void agregarRespuesta(Comentario c){
		this.respuestas.add(c);
	}
	
	public int nivel(){
		int nivel = 0;
		Comentario padre = this.respondeA; 
		while (padre != null){
				nivel++;
				padre = padre.respondeA;
		}
		return nivel;
	}
}